package com.stefan.provider;

import com.stefan.framework.LocalRegister;
import com.stefan.framework.RemoteAddressRegister;
import com.stefan.framework.protocol.Protocol;
import com.stefan.framework.protocol.ProtocolFactory;
import com.stefan.framework.protocol.URL;
import com.stefan.framework.protocol.http.HttpServer;
import com.stefan.provider.api.HelloService;
import com.stefan.provider.impl.HelloServiceImpl;

public class App {
    public static void main(String[] args) {
        // 注册服务 -> 注册helloService服务
        // 这里的注册是将服务提供者的实现类注册到本地注册中心,供framework发现然后根据consumer的request来调用的
        LocalRegister.register(HelloService.class.getName(), HelloServiceImpl.class);

        // 设置服务端口和地址
        // 想一下这里不能写死，因为可能会有多个服务提供者，所以这里才是真正注册服务的地址+端口号
        // 这里是需要注册到第三方的中间件需要被consumer发现
        URL url = new URL("localhost", 8080);
        RemoteAddressRegister.register(HelloService.class.getName(), url);

        //启动服务
//        HttpServer httpServer = new HttpServer();
//        httpServer.start(url.getHostname(), url.getPort());
        //为了支持多种协议，这里不直接启动HttpServer，而是通过Protocol接口来启动
        Protocol protocol = ProtocolFactory.getProtocol();
        protocol.start(url);
    }
}
